package algorithm.problems.array;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Created by gouthamvidyapradhan on 04/05/2018.
 *
 * On a table are N cards, with a positive integer printed on the front and back of each card (possibly different).

 We flip any number of cards, and after we choose one card.

 If the number X on the back of the chosen card is not on the front of any card, then this number X is good.

 What is the smallest number that is good?  If no number is good, output 0.

 Here, fronts[i] and backs[i] represent the number on the front and back of card i.

 A flip swaps the front and back numbers, so the value on the front is now on the back and vice versa.

 Example:

 Input: fronts = [1,2,4,4,7], backs = [1,3,4,1,3]
 Output: 2
 Explanation: If we flip the second card, the fronts are [1,3,4,4,7] and the backs are [1,2,4,1,3].
 We choose the second card, which has number 2 on the back, and it isn't on the front of any card, so 2 is good.


 Note:

 1 <= fronts.length == backs.length <= 1000.
 1 <= fronts[i] <= 2000.
 1 <= backs[i] <= 2000.

 */
public class CardFilipGame {

    public static void main(String[] args) {

    }

    public int flipgame(int[] fronts, int[] backs) {
        List<Integer> numbers = new ArrayList<>();
        for(int i = 0; i < fronts.length; i ++){
            numbers.add(fronts[i]);
            numbers.add(backs[i]);
        }
        Collections.sort(numbers);
        for(int n : numbers){
            boolean success = true;
            for(int i = 0; i < fronts.length; i ++){
                if(n == fronts[i] && n == backs[i]){
                    success = false;
                    break;
                }
            }
            if(success){
                return n;
            }
        }
        return 0;
    }

}
